#ifndef POINT2_H
#define POINT2_H

#include "bga/system/Tuple.h"

namespace bga
{

template< typename T >
class Point2 : public Tuple<2, T>
{
    public:
        /**
         * Default Constructor
         */
        Point2();

        /**
         * Copy Constructor
         */
        Point2(const Point2<T>& point2);

        /**
         * Constructor unsing fields
         * \param x : x value
         * \param y : y value
         */
        Point2(T x, T y);

        /**
         * Destructor
         */
        virtual ~Point2();


        /**
         * Operator needed to assign new value to the current point
         * \param point2 : Point to assign to current point
         */
        Point2<T>& operator=(const Point2& point2);

        /**
         * Set the values of the current point
         * \param x : x value
         * \param y : y value
         */
        void setXY(T x, T y);

        T getX() const ;
        T getY() const ;
};

typedef Point2<float> Point2f;
typedef Point2<double> Point2d;
typedef Point2<int> Point2i;

}

#include "bga/math/Point2.inl"

#endif // POINT2_H

